home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Visual Basic Controls
/
Visual Basic Controls.iso
/
vbcontrol
/
resize_1
/
module1.bas
next >
Wrap
BASIC Source File
|
1999-07-18
|
3KB
|
97 lines
Attribute VB_Name = "ResizeMod"
Option Explicit
Public lngMinHeight As Long
Public lngMinWidth As Long
Public lngMaxHeight As Long
Public lngMaxWidth As Long
Public lpPrevWndProc As Long
Public lngHwnd As Long
Private Const GWL_WNDPROC = -4
Private Const WM_GETMINMAXINFO = &H24
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type MINMAXINFO
ptReserved As POINTAPI
ptMaxSize As POINTAPI
ptMaxPosition As POINTAPI
ptMinTrackSize As POINTAPI
ptMaxTrackSize As POINTAPI
End Type
Private Declare Function DefWindowProc Lib "user32" Alias _
"DefWindowProcA" (ByVal hWnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function CallWindowProc Lib "user32" Alias _
"CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
ByVal hWnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hWnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Sub CopyMemoryToMinMaxInfo Lib "KERNEL32" Alias _
"RtlMoveMemory" (hpvDest As MINMAXINFO, ByVal hpvSource As Long, _
ByVal cbCopy As Long)
Private Declare Sub CopyMemoryFromMinMaxInfo Lib "KERNEL32" Alias _
"RtlMoveMemory" (ByVal hpvDest As Long, hpvSource As MINMAXINFO, _
ByVal cbCopy As Long)
Private Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Dim MinMax As MINMAXINFO
'Check for request for min/max window sizes.
If uMsg = WM_GETMINMAXINFO Then
'Retrieve default MinMax settings
CopyMemoryToMinMaxInfo MinMax, lParam, Len(MinMax)
'Specify new minimum size for window.
If lngMinHeight <> 0 Then
MinMax.ptMinTrackSize.y = lngMinHeight / Screen.TwipsPerPixelY
End If
If lngMinWidth <> 0 Then
MinMax.ptMinTrackSize.x = lngMinWidth / Screen.TwipsPerPixelX
End If
'Specify new maximum size for window.
If lngMaxHeight <> 0 Then
MinMax.ptMaxTrackSize.y = lngMaxHeight / Screen.TwipsPerPixelY
End If
If lngMaxWidth <> 0 Then
MinMax.ptMaxTrackSize.x = lngMaxWidth / Screen.TwipsPerPixelX
End If
'Copy local structure back.
CopyMemoryFromMinMaxInfo lParam, MinMax, Len(MinMax)
WindowProc = DefWindowProc(hw, uMsg, wParam, lParam)
Else
WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, _
wParam, lParam)
End If
End Function
Public Sub Unhook()
Dim temp As Long
'Cease subclassing.
temp = SetWindowLong(lngHwnd, GWL_WNDPROC, lpPrevWndProc)
End Sub
Public Sub Hook()
'Start subclassing.
lpPrevWndProc = SetWindowLong(lngHwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Property Get hWnd() As Long
hWnd = lngHwnd
End Property
Public Property Let hWnd(ByVal lngNewValue As Long)
lngHwnd = lngNewValue
End Property